#ifndef __WIZ_ALGORITHM_STRINGHASH_HPP__SHANHAOBO_19800429__
#define __WIZ_ALGORITHM_STRINGHASH_HPP__SHANHAOBO_19800429__

#include "../../../Base/Type/WizBaseType.hpp"

namespace Wiz
{
    namespace StringHash
    {
        namespace BKDR
        {
            /// Case sensitive
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::WChar::ConstPtr InStr);

            /// Case insensitive
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::WChar::ConstPtr InStr);
        } /// end of namespace BKDR

        namespace SDBM
        {
            /// Case sensitive
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::WChar::ConstPtr InStr);

            /// Case insensitive
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::WChar::ConstPtr InStr);
        } /// end of namespace SDBM

        namespace AP
        {
            /// Case sensitive
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::WChar::ConstPtr InStr);

            /// Case insensitive
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::WChar::ConstPtr InStr);
        } /// end of namespace AP

        namespace JS
        {
            /// Case sensitive
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::WChar::ConstPtr InStr);

            /// Case insensitive
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::WChar::ConstPtr InStr);
        } /// end of namespace JS

        namespace NoName
        {
            /// Case sensitive
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type Calc(::Wiz::WChar::ConstPtr InStr);

            /// Case insensitive
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::Char::ConstPtr InStr);
            WIZ_EXPORT ::Wiz::Index32::Type CalcInCase(::Wiz::WChar::ConstPtr InStr);
        } /// end of namespace NoName
    } /// end of namespace StringHash
} /// end of namespace Wiz

#endif /*__WIZ_ALGORITHM_STRINGHASH_HPP__SHANHAOBO_19800429__*/

